package com.qiqu.utils;

import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * 日期工具类
 * 传入一个 2018-06-01 18:35:35 格式的日期对象，通过TimeAgoUtils.format方法，多少秒前、多少天前的字符串
 * 
 *
 */
public class TimeAgoUtils {

   private static final long ONE_MINUTE = 60000L;
   private static final long ONE_HOUR = 3600000L;
   private static final long ONE_DAY = 86400000L;
   private static final long ONE_WEEK = 604800000L;

   private static final String ONE_SECOND_AGO = "秒前";
   private static final String ONE_MINUTE_AGO = "分钟前";
   private static final String ONE_HOUR_AGO = "小时前";
   private static final String ONE_DAY_AGO = "天前";
   private static final String ONE_MONTH_AGO = "月前";
   private static final String ONE_YEAR_AGO = "年前";

   public static String format(Date date) {
      long delta = new Date().getTime() - date.getTime();
      if (delta < 1L * ONE_MINUTE) {
         long seconds = toSeconds(delta);
         return (seconds <= 0 ? 1 : seconds) + ONE_SECOND_AGO;
      }
      if (delta < 45L * ONE_MINUTE) {
         long minutes = toMinutes(delta);
         return (minutes <= 0 ? 1 : minutes) + ONE_MINUTE_AGO;
      }
      if (delta < 24L * ONE_HOUR) {
         long hours = toHours(delta);
         return (hours <= 0 ? 1 : hours) + ONE_HOUR_AGO;
      }
      if (delta < 48L * ONE_HOUR) {
         return "昨天";
      }
      if (delta < 30L * ONE_DAY) {
         long days = toDays(delta);
         return (days <= 0 ? 1 : days) + ONE_DAY_AGO;
      }
      if (delta < 12L * 4L * ONE_WEEK) {
         long months = toMonths(delta);
         return (months <= 0 ? 1 : months) + ONE_MONTH_AGO;
      } else {
         long years = toYears(delta);
         return (years <= 0 ? 1 : years) + ONE_YEAR_AGO;
      }
   }

   private static long toSeconds(long date) {
      return date / 1000L;
   }

   private static long toMinutes(long date) {
      return toSeconds(date) / 60L;
   }

   private static long toHours(long date) {
      return toMinutes(date) / 60L;
   }

   private static long toDays(long date) {
      return toHours(date) / 24L;
   }

   private static long toMonths(long date) {
      return toDays(date) / 30L;
   }

   private static long toYears(long date) {
      return toMonths(date) / 365L;
   }

   public static void main(String[] args) throws Exception {
      SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
      Date date = sdf.parse("2018-06-01 18:35:35");
      
      System.out.println(TimeAgoUtils.format(date));
      
      
   }

}
